์†Œ์ˆ˜ ์ฐพ๊ธฐ

8/12/2025
/ ์‹œ๊ฐ„์ดˆ๊ณผ 7
function solution2(n) {
    var answer = 0;
    let arr = [];
    for(let i = 2;i<=n;i++){
    	let flag = true;
    	for(let j = 2;j<i;j++){
    		if(i%j===0){
    			flag = false;
    			break;
    		}
    	}
    	if(flag) arr.push(i);
    }
    // console.log(arr);
    return arr.length;
}

// ์‹œ๊ฐ„์ดˆ๊ณผ 5๊ฐœ
function solution3(n){
	let arr = [];
	for(let i = 2;i<=n;i++){
    	let flag = true;
    	for(const pn of arr){
    		if(i%pn===0){
    			flag = false;
    			break;
    		}
    	}
    	if(flag) arr.push(i);
    }
    // console.log(arr);
    return arr.length;
}

function solution(n) {
    let isPrime = new Array(n + 1).fill(true);
    isPrime[0] = isPrime[1] = false;
    
    for(let i = 2; i * i <= n; i++) {
        if(isPrime[i]) {
            for(let j = i * i; j <= n; j += i) {
                isPrime[j] = false;
            }
        }
    }
   	let arr = [];
   	for (let i=2;i<isPrime.length;i++){
   		if(isPrime[i]){
   			arr.push(i);
   		}
   	}
   	// console.log(arr);
    return arr.length;
}

// console.log(solution(1000));
// console.log(solution(5));
console.log(solution(1000000));

๋งจ ์ฒ˜์Œ ์ž‘์„ฑํ•œ solution2๋Š” $O(n^2)$์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. n๊ฐœ์˜ ์ž…๋ ฅ๋งˆ๋‹ค i๋ฐ˜๋ณต๋งˆ๋‹ค j๋ฐ˜๋ณต์„ ๋Œ๋ฆฌ๋‹ˆ๊นŒ.

๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์„ฑํ•œ solution3์€?

  1. ์ผ๋‹จ i๋ฐ˜๋ณต์ด ํ•˜๋‚˜ ์žˆ์œผ๋‹ˆ๊นŒ n,
  2. i ๋ฐ˜๋ณต ์•ˆ์—์„œ arr์˜ ํฌ๊ธฐ๋งŒํผ(ํ˜„์žฌ๊นŒ์ง€ ๊ตฌํ•œ ์†Œ์ˆ˜์˜ ์ˆ˜) ๋ฐ˜๋ณต์„ ํ•œ๋‹ค. (๋งค ๋ฒˆ ๋‹ฌ๋ผ์ง„๋‹ค.) arr์˜ ํฌ๊ธฐ๋Š” ๋Œ€๋žต $n/log{n}$๊ฐœ๋ผ๊ณ  ํ•œ๋‹ค. (n=10, 10/log10= 4๊ณ  ์‹ค์žฌ๋กœ 2,3,5,7๋กœ 4๊ฐœ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ $O(n^2/logn)$ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. n๋ฒˆ ๋ฐ˜๋ณต๋งˆ๋‹ค n/logn๊ฐœ์˜ ์ˆซ์ž์™€ ํ™•์ธํ•˜๋‹ˆ๊นŒ.

๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์„ฑํ•œ solution์€ '์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด' ๋ฐฉ๋ฒ•์ด๋‹ค.

  1. ๋ฏธ๋ฆฌ n๊นŒ์ง€์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ , ๋‹ค true๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. (n+1๊ฐœ๊ฐ€ ๋œ๋‹ค)
  2. i๋ฐ˜๋ณต์„ ํ†ตํ•ด ์œ„์˜ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ’์ด true์ธ ๊ฒฝ์šฐ ๊ทธ index์˜ ๋ชจ๋“  ๋ฐฐ์ˆ˜์˜ index๋ฅผ ๋‹ค false๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋‹จ์ˆœํžˆ 1๋ฒˆ๊ณผ 2๋ฒˆ์„ ๊ณฑํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ ์กฐ๊ธˆ ๋” ๋ณต์žกํ•˜๊ฒŒ ๊ณ„์‚ฐํ•ด์•ผํ•œ๋‹ค. $\sum{n/p}$์ด๊ณ  ์ด๋Š” $log{log{n}}$์— ์ˆ˜๋ ดํ•œ๋‹ค๊ณ . ๊ทธ๋ž˜์„œ $O(log{log{n}})$๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค.